package com.future.myjavatools.core.zhoupu;



import com.future.myjavatools.constant.SymbolConstantUtil;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * @program: zp-crm
 * @description: 钱 工具类
 * @author: lianweiq
 * @create: 2019-09-10 13:36
 */
public class MoneyUtils {


    private static final String UNIT = "万千佰拾亿千佰拾万千佰拾元角分";
    private static final String DIGIT = "零壹贰叁肆伍陆柒捌玖";
    private static final double MAX_VALUE = 9999999999999.99D;
    private static final String MONEY_UNIT_FEN_YUAN = "100";


    /**
     * 将小写金额转换成大写
     *
     * @param v
     * @return
     */
    public static String transferToUpper(double v) {
        if (v < 0 || v > MAX_VALUE) {
            return "参数非法!";
        }
        long l = Math.round(v * 100);
        if (l == 0) {
            return "零元整";
        }
        String strValue = l + "";
        // i用来控制数
        int i = 0;
        // j用来控制单位
        int j = UNIT.length() - strValue.length();
        String rs = "";
        boolean isZero = false;
        for (; i < strValue.length(); i++, j++) {
            char ch = strValue.charAt(i);
            if (ch == '0') {
                isZero = true;
                if (UNIT.charAt(j) == '亿' || UNIT.charAt(j) == '万' || UNIT.charAt(j) == '元') {
                    rs = rs + UNIT.charAt(j);
                    isZero = false;
                }
            } else {
                if (isZero) {
                    rs = rs + "零";
                    isZero = false;
                }
                rs = rs + DIGIT.charAt(ch - '0') + UNIT.charAt(j);
            }
        }
        if (!rs.endsWith("分")) {
            rs = rs + "整";
        }
        rs = rs.replaceAll("亿万", "亿");
        return rs;
    }

    public static BigDecimal fen2DecimalYuan(Long fen){
        if(null == fen){
            return BigDecimal.ZERO;
        }
        return new BigDecimal(fen)
                .setScale(2, BigDecimal.ROUND_DOWN)
                .divide(new BigDecimal(100),BigDecimal.ROUND_DOWN);
    }

    public static BigDecimal calScale(double fen){

        return new BigDecimal(fen)
                .multiply(new BigDecimal(100))
                .setScale(2,BigDecimal.ROUND_DOWN);
    }


    public static BigDecimal fen2DecimalYuan(BigDecimal fen){
        if(null == fen){
            return BigDecimal.ZERO;
        }
        return fen
                .setScale(2,BigDecimal.ROUND_DOWN)
                .divide(new BigDecimal(100),BigDecimal.ROUND_DOWN);
    }

    public static long halfUp(double v){

          return BigDecimal.valueOf(v).setScale(0,RoundingMode.HALF_UP).longValue();
    }

    /**
     * 元换算成分
     * @param yuan
     * @return
     */
    public static Long yuan2Fen(BigDecimal yuan){
        if(yuan == null){
            return 0L;
        }
        return yuan.multiply(new BigDecimal(MONEY_UNIT_FEN_YUAN))
                .setScale(0, RoundingMode.HALF_DOWN).longValue();
    }

}
